home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 4
/
Aminet 4 - November 1994.iso
/
aminet
/
dev
/
m2
/
m2_part1.lha
/
modula
/
src
/
StdLib.def
< prev
next >
Wrap
Text File
|
1994-07-30
|
6KB
|
157 lines
DEFINITION FOR C MODULE StdLib ;
FROM SYSTEM IMPORT ADDRESS, STRING, BYTE ;
TYPE
STRINGPtr = POINTER TO STRING ;
CONST
EXIT_FAILURE = 1 ;
EXIT_SUCCESS = 0 ;
ERANGE = 2 ;
RAND_MAX = MAX( LONGINT ) ;
LONG_MAX = 07FFFFFFFH ;
LONG_MIN = 080000000H ;
HUGE_VAL = 1.0E300 ;
VAR
errno : LONGINT ; (* duplicated from errno.def *)
(* set this to zero before calling a function and test it afterwards *)
(* eg. errno := 0 ; *)
(* x := atof( str ) ; *)
(* IF errno # 0 THEN (* handle error *) END *)
PROCEDURE abort( ) ;
(* aborts the program, as exit(20) *)
PROCEDURE abs( int : LONGINT ) : LONGINT ;
PROCEDURE labs( long : LONGINT ) : LONGINT ;
PROCEDURE exit( rc : LONGINT ) ;
(* exits the program with return code rc *)
PROCEDURE atexit( p : PROC ) : LONGINT ;
(* At program exit p will be called. *)
(* This is normally a procedure that frees any aquired resources etc *)
(* atexit returns non-zero if p could not be installed. *)
PROCEDURE atoi( cs : STRING ) : LONGINT ;
(* converts string cs to longint , as strtol( cs , NIL , 10 ) *)
PROCEDURE atol( cs : STRING ) : LONGINT ;
(* as atoi *)
PROCEDURE atof( cs : STRING ) : LONGREAL ;
(* converts cs to a longreal , same as strtod( cs , NIL ) *)
PROCEDURE strtod( cs : STRING ; endp : STRINGPtr ) : LONGREAL ;
(* converts cs to a longreal , leading spaces are ignored *)
(* If the conversion will overflow then (+/-)HUGE_VAL is returned. *)
(* Elsif the result will underflow then 0 is returned. *)
(* In both cases errno is set to ERANGE. *)
(* If endp # NIL then endp^ points to any unconverted suffix of cs *)
PROCEDURE strtol( cs : STRING ; endp : STRINGPtr ; base : LONGINT ) : LONGINT ;
(* converts cs to a longint , leading spaces are ignored. *)
(* Base can be 0 or a number between 2 & 36. *)
(* If base = 0 then it is assumed 8 if cs start with a 0 , 16 if cs starts *)
(* 0x or 0X , base 10 otherwise. *)
(* If base = 16 the cs can start with 0x or 0X *)
(* If the conversion will overflow then LONG_MAX or LONG_MIN is returned *)
(* In both cases errno is set to ERANGE. *)
(* If endp # NIL then endp^ points to any unconverted suffix of cs *)
PROCEDURE getenv( ev : STRING ) : STRING ;
(* getenv returns the environment variable associated with ev *)
(* (environment variables are set using the amigaDOS SETENV command) *)
(* or NIL if ev could not be found. *)
PROCEDURE malloc( size : LONGINT ) : ADDRESS ;
(* Allocates and returns size bytes of uninitialized heap storage *)
(* malloc returns NIL if the memory could not be found. *)
PROCEDURE calloc( nobj : LONGINT ; size : LONGINT ) : ADDRESS ;
(* Allocates and returns an array of nobj elements whose *)
(* element_size = size bytes. The memory is initialized to 0's. *)
(* calloc returns NIL if the memory could not be found. *)
PROCEDURE realloc( adr : ADDRESS ; size : LONGINT ) : ADDRESS ;
(* reallocates memory from a previous call to malloc, calloc or realloc *)
(* The old contents of the old area is copied to the new area, *)
(* if size is smaller than the previous size then only size bytes are copied *)
(* otherwise the extra area is unitialized. realloc returns NIL if it fails *)
(* to reallocate the memory. *)
PROCEDURE free( adr : ADDRESS ) ;
(* frees memory allocated from one of above 3 functions. adr may be NIL *)
PROCEDURE rand( ) : LONGINT ;
(* returns a psuedo random number in the range 0 to RAND_MAX *)
PROCEDURE srand( seed : LONGINT ) ;
(* reseeds rand.The initial seed is 1 *)
PROCEDURE system( cs : STRING ) : LONGINT ;
(* passes cs to amigaDOS for execution, the returned value may or may not *)
(* be the return value of the command (depending on which version of *)
(* amigaDOS is in use ,V36 should return something useful) *)
TYPE
CompProc = PROCEDURE( ADDRESS, ADDRESS ) : LONGINT ;
(* bsearch & qsort expect a procedure parameter that returns a -ve result *)
(* if the first arg is greater than the second , 0 is both are same , *)
(* a +ve result otherwise. *)
PROCEDURE bsearch( VAR key : ARRAY OF BYTE ;
VAR base : ARRAY OF BYTE ;
num, size : LONGINT ;
cmpProc : CompProc ) : ADDRESS ;
(* Does a binary chop lookup of key in base, num = number of elements in base *)
(* size = size of key & size of each element in base. *)
(* Elements in base must be in ascending order. *)
(* bsearch returns NIL if the key could not be matched otherwise a pointer to *)
(* to the matching element. *)
(* The address of key is passed as the first parameter to cmpProc. *)
PROCEDURE qsort( VAR base : ARRAY OF BYTE ;
n, size : LONGINT ;
cmp : CompProc ) ;
(* Sorts base into ascending order *)
(* Non-ANSI functions *)
TYPE
IntProc = PROCEDURE( ) : LONGINT ;
PROCEDURE onbreak( handler : IntProc ) : IntProc ;
(* handler is called if chkabort detects a break signal, returns the *)
(* old break handler. *)
(* If the handler returns 0 then the program continues execution otherwise *)
(* the program exits.The default DICE handler terminates program execution. *)
PROCEDURE chkabort( ) ;
(* Checks to see if the program has been sent a break signal eg ^C pressed. *)
(* If a break is detected then the the break handler is called. *)
(* Note some library functions (in StdIO) call chkabort and should therefore *)
(* not be called in critical sections of your program unless youve disabled *)
(* break checking by installing your own break handler. *)
PROCEDURE expand_args( argcIn : LONGINT ;
argvIn : ADDRESS ;
VAR argvOut : LONGINT ;
VAR argcOut : ADDRESS ) : LONGINT ;
(* This function will expand any amigaDOS wildcards that were specified on *)
(* the command line, A typical call might be: *)
(* err := StdLib.expand_args( M2Lib.argc, M2Lib.argc, M2Lib.argc, M2Lib.argv)*)
(* Return 0 on success, non-zero otherwise (run out of stack etc) *)
(* Any program that uses expand_args() should be run with at least 8K of stack*)
END StdLib.